﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Tst.Models
{
    public class UsuarioRepository
    {
        private TstEntities context;

        public UsuarioRepository()
        {
            this.context = new TstEntities();
        }

        ~UsuarioRepository()
        {
            this.context.Dispose();
        }

        public void Save()
        {
            this.context.SaveChanges();
        }

        public Usuario GetByLoginAndSenha(string login, string senha)
        {            
            return this.context.Usuario.FirstOrDefault(u => u.ds_login.Equals(login) && u.ds_senha.Equals(senha));            
        }

        public Usuario GetByLogin(string login)
        {
            return this.context.Usuario.FirstOrDefault(u => u.ds_login.Equals(login));
        }

        public IList<Usuario> GetByTipo(string ds_tipo)
        {
            return this.context.Usuario.Where(u => u.ds_tipo.Equals(ds_tipo)).ToList();
        }

        public IList<Usuario> GetByTipoAndLogin(string ds_tipo, string ds_login)
        {
            return this.context.Usuario.Where("ds_tipo='" + ds_tipo + "' AND ds_login like '%" + ds_login + "%'").ToList();
        }

        public IList<Usuario> GetAll()
        {
            return this.context.Usuario.ToList();
        }

        public Usuario GetById(int cd_usuario)
        {
            return this.context.Usuario.FirstOrDefault(u => u.cd_usuario == cd_usuario);
        }

        public Usuario Insert(Usuario usuario)
        {
            this.context.AddToUsuario(usuario);

            if (usuario.Permissoes != null)
                this.context.AddToUsuarioPermissao(usuario.Permissoes);

            return usuario;
        }
   
        public void Update(Usuario usuario)
        {                       
            this.context.AttachUpdated(usuario);

            if (usuario.Permissoes != null)
                this.context.AttachUpdated(usuario.Permissoes);
        }
        
        public void Delete(int cd_usuario)
        {
            Usuario usuario = this.GetById(cd_usuario);

            if (usuario != null)
            {
                usuario.PermissoesReference.Load();

                if (usuario.Permissoes != null)
                    this.context.DeleteObject(usuario.Permissoes);


                this.context.DeleteObject(usuario);
            }
        }    
    }
}
